package com.ym.curd.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ym.curd.bean.Department;
import com.ym.curd.bean.Employee;
import com.ym.curd.service.DepartmentService;
import com.ym.curd.service.EmployeeService;

@Controller
public class EmployeeController {

	//引入业务层代码EmployeeService对象
	@Autowired
	EmployeeService employeeService;
	//引入业务层代码DepartmentService对象
	@Autowired
	DepartmentService departmentService;
	//编写一个方法用来处理查询员工的请求
	@RequestMapping(value="/emps")
	public String getEmps(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
		//查询之前引入pageHelper插件，只需要指定当前的页码，每一页的查询数量即可
		PageHelper.startPage(pn, 5);
		//在startPage方法之后调用的查询方法默认就是按照分页进行查询
		List<Employee> emps = employeeService.getAll();
		//使用PageInfo包装查询的结果，pageInfo中包含我们需要的分页的所有的信息，例如，当前的页码，是否是第一页或最后一页，连续查询的页面等等
		PageInfo page = new PageInfo(emps, 5);
		//将pageInfo存放到属性范围中，在页面跳转之后我们可以获取对应的信息
		model.addAttribute("pageInfo", page);
		return "list";
	}
	//编写一个方法用来处理跳转到添加员工页面请求
	@RequestMapping(value="/emp",method=RequestMethod.GET)
	public String goAddEmpPage(Model model){
		//查询全部的部门并传递到添加员工的页面进行显示
		List<Department> depts = departmentService.getAll();
		model.addAttribute("depts", depts);
		return "addEmp";
	}
	//编写一个方法用来处理添加员工的请求
	@RequestMapping(value="/addEmp",method=RequestMethod.POST)
	public String addEmp(Employee emp,Model model){
		//校验员工信息是否正确
		if(emp==null||emp.getEmpName()==null||emp.getEmpName().trim().equals("")||emp.getEmail()==null||emp.getEmail().trim().equals("")){
			model.addAttribute("errorInfo", "<font color='red'>信息不能为空</font>");
			List<Department> depts = departmentService.getAll();
			model.addAttribute("depts", depts);
			return "addEmp";
		}
		//首先获取员工的部门
		//获取员工的部门编号
		Integer deptId = emp.getDepartment().getDeptId();
		//根据部门编号获取部门信息
		Department dept = departmentService.getDepartmentById(deptId);
		//将部门信息设置给员工的对象
		emp.setDepartment(dept);
		emp.setdId(deptId);
		//将员工保存
		employeeService.insertEmp(emp);
		return "redirect:/emps";
	}
	//	编写一个方法用来处理跳转到修改页面的请求
	@RequestMapping(value="/updateEmp",method=RequestMethod.GET)
	public String goUpdateEmpPage(@RequestParam(value="empId")Integer empId,Model model){
		//	根据获取员工编号获取查询员工的信息
		Employee emp = employeeService.getEmployeeByEmpId(empId);
		//将员工信息保存到request属性范围
		model.addAttribute("emp", emp);
		//获取全部部门信息
		List<Department> depts = departmentService.getAll();
		model.addAttribute("depts", depts);
		return "updateEmp";
	}
//	编写一个方法修改员工的操作
	@RequestMapping(value="/updateEmp",method=RequestMethod.PUT)
	public String updateEmp(Employee emp){
		System.out.println(emp);
		//向数据库执行修改操作
		employeeService.updateEmp(emp);
		return "redirect:/emps";
	}
	//	编写一个方法用来进行员工的信息的删除
	@RequestMapping(value="/deleteEmp",method=RequestMethod.DELETE)
	public String deleteEmp(@RequestParam(value="empId")Integer empId){
		employeeService.deleteEmp(empId);
		return "redirect:/emps";
	}
}
